日本語でHugging Face Tokenizersを動かす
この記事だと、transformersのトークナイザとインターフェースが揃わず、補う必要があった
一方でちょうど一年ほど前に、Transformersが用いるトークナイザはRust実装の別ライブラリ——Tokenizersとして分離された。
Transformers内ではFastTokenizerという呼称で既存のPython実装トークナイザと区別され、v4.0.0以降ではデフォルトで使用されるようになっている:
日本語には余計なBERTの前処理
漢字を一文字分割しない: tokenize_chinese_chars=False
濁点を除去させない: strip_accents=False
日本語でHugging Face Tokenizersを動かす
Hugging Face TokenizersにおけるTokenizerオブジェクトとは、以下の要素からなる各種処理のパイプラインコンテナである。
Encode方向: 文字列 → 事前学習モデル入力可能なEncodingオブジェクト
Decode方向: トークン列 (Encoding)→ 元の文字列
注意すべき点としては、TokenizersにおけるTokenというのは、いわゆる単語ではなくサブワードのことである。
つまり、従来の日本語形態素解析器は、TokenizersパイプラインにおけるPreTokenizerに位置づけられる(英語ではカンマなどを考慮したwhite space分割などに相当)。
PreTokenizerにMeCabを差し込む
作成した日本語custom PreTokenizerを備えたTokenizerを使って、サブワード分割学習・シリアライズ・ロード、と使ってみようとすると、custom PreTokenizerはシリアライズできないと怒られる。
シリアライズ可能なノンカスタムのPreTokenizerをダミーで代入してシリアライズすることで回避した